<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    class Person {
      name = '孙悟空'
      age = 18
      sayHello() {
        console.log('hello! 我是', this.name)
      }
    }
    const p1 = new Person()
    console.log('p1', p1)
    console.log('p1._proto_', p1.__proto__)
    console.log(Object.getPrototypeOf(p1))
    /*
      访问一个对象的原型对象
        - p1.__proto__
        - Object.getPrototypeOf(p1)
        以上俩个方式都可以，一般而言是用第二个

      原型对象上的数据
          1.从源对象添加过来的属性和方法(例如上面的sayHello)
          2.constructor 对象的构造函数

      原型对象也有原型，这样就构成了一条原型链

    */
  </script>
</body>
</html>